<!-- HTML header for doxygen 1.8.6-->
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.13"/>
<title>OpenCV: Using MultiTracker</title>
<link href="../../opencv.ico" rel="shortcut icon" type="image/x-icon" />
<link href="../../tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="../../jquery.js"></script>
<script type="text/javascript" src="../../dynsections.js"></script>
<script type="text/javascript" src="../../tutorial-utils.js"></script>
<link href="../../search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="../../search/searchdata.js"></script>
<script type="text/javascript" src="../../search/search.js"></script>
<script type="text/x-mathjax-config">
  MathJax.Hub.Config({
    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
    jax: ["input/TeX","output/HTML-CSS"],
});
//<![CDATA[
MathJax.Hub.Config(
{
  TeX: {
      Macros: {
          matTT: [ "\\[ \\left|\\begin{array}{ccc} #1 & #2 & #3\\\\ #4 & #5 & #6\\\\ #7 & #8 & #9 \\end{array}\\right| \\]", 9],
          fork: ["\\left\\{ \\begin{array}{l l} #1 & \\mbox{#2}\\\\ #3 & \\mbox{#4}\\\\ \\end{array} \\right.", 4],
          forkthree: ["\\left\\{ \\begin{array}{l l} #1 & \\mbox{#2}\\\\ #3 & \\mbox{#4}\\\\ #5 & \\mbox{#6}\\\\ \\end{array} \\right.", 6],
          forkfour: ["\\left\\{ \\begin{array}{l l} #1 & \\mbox{#2}\\\\ #3 & \\mbox{#4}\\\\ #5 & \\mbox{#6}\\\\ #7 & \\mbox{#8}\\\\ \\end{array} \\right.", 8],
          vecthree: ["\\begin{bmatrix} #1\\\\ #2\\\\ #3 \\end{bmatrix}", 3],
          vecthreethree: ["\\begin{bmatrix} #1 & #2 & #3\\\\ #4 & #5 & #6\\\\ #7 & #8 & #9 \\end{bmatrix}", 9],
          cameramatrix: ["#1 = \\begin{bmatrix} f_x & 0 & c_x\\\\ 0 & f_y & c_y\\\\ 0 & 0 & 1 \\end{bmatrix}", 1],
          distcoeffs: ["(k_1, k_2, p_1, p_2[, k_3[, k_4, k_5, k_6 [, s_1, s_2, s_3, s_4[, \\tau_x, \\tau_y]]]]) \\text{ of 4, 5, 8, 12 or 14 elements}"],
          distcoeffsfisheye: ["(k_1, k_2, k_3, k_4)"],
          hdotsfor: ["\\dots", 1],
          mathbbm: ["\\mathbb{#1}", 1],
          bordermatrix: ["\\matrix{#1}", 1]
      }
  }
}
);
//]]>
</script><script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.0/MathJax.js"></script>
<link href="../../doxygen.css" rel="stylesheet" type="text/css" />
<link href="../../stylesheet.css" rel="stylesheet" type="text/css"/>
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<!--#include virtual="/google-search.html"-->
<table cellspacing="0" cellpadding="0">
 <tbody>
 <tr style="height: 56px;">
  <td id="projectlogo"><img alt="Logo" src="../../opencv-logo-small.png"/></td>
  <td style="padding-left: 0.5em;">
   <div id="projectname">OpenCV
   &#160;<span id="projectnumber">4.5.2</span>
   </div>
   <div id="projectbrief">Open Source Computer Vision</div>
  </td>
 </tr>
 </tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.13 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
</script>
<script type="text/javascript" src="../../menudata.js"></script>
<script type="text/javascript" src="../../menu.js"></script>
<script type="text/javascript">
$(function() {
  initMenu('../../',true,false,'search.php','Search');
  $(document).ready(function() { init_search(); });
});
</script>
<div id="main-nav"></div>
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
     onmouseover="return searchBox.OnSearchSelectShow()"
     onmouseout="return searchBox.OnSearchSelectHide()"
     onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>

<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0" 
        name="MSearchResults" id="MSearchResults">
</iframe>
</div>

<div id="nav-path" class="navpath">
  <ul>
<li class="navelem"><a class="el" href="../../d3/d81/tutorial_contrib_root.html">Tutorials for contrib modules</a></li>  </ul>
</div>
</div><!-- top -->
<div class="header">
  <div class="headertitle">
<div class="title">Using MultiTracker </div>  </div>
</div><!--header-->
<div class="contents">
<div class="textblock"><h2>Goal </h2>
<p>In this tutorial you will learn how to</p>
<ul>
<li>Create a MultiTracker object.</li>
<li>Track several objects at once using the MultiTracker object.</li>
</ul>
<h2>Source Code </h2>
<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;<span class="comment">/*----------------------------------------------</span></div><div class="line"><a name="l00002"></a><span class="lineno">    2</span>&#160;<span class="comment"> * Usage:</span></div><div class="line"><a name="l00003"></a><span class="lineno">    3</span>&#160;<span class="comment"> * example_tracking_multitracker &lt;video_name&gt; [algorithm]</span></div><div class="line"><a name="l00004"></a><span class="lineno">    4</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00005"></a><span class="lineno">    5</span>&#160;<span class="comment"> * example:</span></div><div class="line"><a name="l00006"></a><span class="lineno">    6</span>&#160;<span class="comment"> * example_tracking_multitracker Bolt/img/%04d.jpg</span></div><div class="line"><a name="l00007"></a><span class="lineno">    7</span>&#160;<span class="comment"> * example_tracking_multitracker faceocc2.webm KCF</span></div><div class="line"><a name="l00008"></a><span class="lineno">    8</span>&#160;<span class="comment"> *--------------------------------------------------*/</span></div><div class="line"><a name="l00009"></a><span class="lineno">    9</span>&#160;</div><div class="line"><a name="l00010"></a><span class="lineno">   10</span>&#160;<span class="preprocessor">#include &lt;<a class="code" href="../../d1/d4e/utility_8hpp.html">opencv2/core/utility.hpp</a>&gt;</span></div><div class="line"><a name="l00011"></a><span class="lineno">   11</span>&#160;<span class="preprocessor">#include &lt;<a class="code" href="../../de/df6/contrib_2modules_2tracking_2include_2opencv2_2tracking_8hpp.html">opencv2/tracking.hpp</a>&gt;</span></div><div class="line"><a name="l00012"></a><span class="lineno">   12</span>&#160;<span class="preprocessor">#include &lt;<a class="code" href="../../dc/d3d/videoio_8hpp.html">opencv2/videoio.hpp</a>&gt;</span></div><div class="line"><a name="l00013"></a><span class="lineno">   13</span>&#160;<span class="preprocessor">#include &lt;<a class="code" href="../../d4/dd5/highgui_8hpp.html">opencv2/highgui.hpp</a>&gt;</span></div><div class="line"><a name="l00014"></a><span class="lineno">   14</span>&#160;<span class="preprocessor">#include &lt;iostream&gt;</span></div><div class="line"><a name="l00015"></a><span class="lineno">   15</span>&#160;<span class="preprocessor">#include &lt;cstring&gt;</span></div><div class="line"><a name="l00016"></a><span class="lineno">   16</span>&#160;<span class="preprocessor">#include &lt;ctime&gt;</span></div><div class="line"><a name="l00017"></a><span class="lineno">   17</span>&#160;<span class="preprocessor">#include &quot;samples_utility.hpp&quot;</span></div><div class="line"><a name="l00018"></a><span class="lineno">   18</span>&#160;</div><div class="line"><a name="l00019"></a><span class="lineno">   19</span>&#160;<span class="keyword">using namespace </span>std;</div><div class="line"><a name="l00020"></a><span class="lineno">   20</span>&#160;<span class="keyword">using namespace </span><a class="code" href="../../d2/d75/namespacecv.html">cv</a>;</div><div class="line"><a name="l00021"></a><span class="lineno">   21</span>&#160;</div><div class="line"><a name="l00022"></a><span class="lineno">   22</span>&#160;<span class="keywordtype">int</span> main( <span class="keywordtype">int</span> argc, <span class="keywordtype">char</span>** argv ){</div><div class="line"><a name="l00023"></a><span class="lineno">   23</span>&#160;  <span class="comment">// show help</span></div><div class="line"><a name="l00024"></a><span class="lineno">   24</span>&#160;  <span class="keywordflow">if</span>(argc&lt;2){</div><div class="line"><a name="l00025"></a><span class="lineno">   25</span>&#160;    cout&lt;&lt;</div><div class="line"><a name="l00026"></a><span class="lineno">   26</span>&#160;      <span class="stringliteral">&quot; Usage: example_tracking_multitracker &lt;video_name&gt; [algorithm]\n&quot;</span></div><div class="line"><a name="l00027"></a><span class="lineno">   27</span>&#160;      <span class="stringliteral">&quot; examples:\n&quot;</span></div><div class="line"><a name="l00028"></a><span class="lineno">   28</span>&#160;      <span class="stringliteral">&quot; example_tracking_multitracker Bolt/img/%04d.jpg\n&quot;</span></div><div class="line"><a name="l00029"></a><span class="lineno">   29</span>&#160;      <span class="stringliteral">&quot; example_tracking_multitracker faceocc2.webm MEDIANFLOW\n&quot;</span></div><div class="line"><a name="l00030"></a><span class="lineno">   30</span>&#160;      &lt;&lt; endl;</div><div class="line"><a name="l00031"></a><span class="lineno">   31</span>&#160;    <span class="keywordflow">return</span> 0;</div><div class="line"><a name="l00032"></a><span class="lineno">   32</span>&#160;  }</div><div class="line"><a name="l00033"></a><span class="lineno">   33</span>&#160;</div><div class="line"><a name="l00034"></a><span class="lineno">   34</span>&#160;  <span class="comment">// set the default tracking algorithm</span></div><div class="line"><a name="l00035"></a><span class="lineno">   35</span>&#160;  std::string trackingAlg = <span class="stringliteral">&quot;KCF&quot;</span>;</div><div class="line"><a name="l00036"></a><span class="lineno">   36</span>&#160;</div><div class="line"><a name="l00037"></a><span class="lineno">   37</span>&#160;  <span class="comment">// set the tracking algorithm from parameter</span></div><div class="line"><a name="l00038"></a><span class="lineno">   38</span>&#160;  <span class="keywordflow">if</span>(argc&gt;2)</div><div class="line"><a name="l00039"></a><span class="lineno">   39</span>&#160;    trackingAlg = argv[2];</div><div class="line"><a name="l00040"></a><span class="lineno">   40</span>&#160;</div><div class="line"><a name="l00041"></a><span class="lineno">   41</span>&#160;  <span class="comment">// create the tracker</span></div><div class="line"><a name="l00043"></a><span class="lineno">   43</span>&#160;<span class="comment"></span>  <a class="code" href="../../df/d4a/classcv_1_1legacy_1_1MultiTracker.html">legacy::MultiTracker</a> trackers;</div><div class="line"><a name="l00045"></a><span class="lineno">   45</span>&#160;</div><div class="line"><a name="l00046"></a><span class="lineno">   46</span>&#160;  <span class="comment">// container of the tracked objects</span></div><div class="line"><a name="l00048"></a><span class="lineno">   48</span>&#160;<span class="comment"></span>  vector&lt;Rect2d&gt; objects;</div><div class="line"><a name="l00050"></a><span class="lineno">   50</span>&#160;</div><div class="line"><a name="l00051"></a><span class="lineno">   51</span>&#160;  <span class="comment">// set input video</span></div><div class="line"><a name="l00052"></a><span class="lineno">   52</span>&#160;  std::string video = argv[1];</div><div class="line"><a name="l00053"></a><span class="lineno">   53</span>&#160;  <a class="code" href="../../d8/dfe/classcv_1_1VideoCapture.html">VideoCapture</a> cap(video);</div><div class="line"><a name="l00054"></a><span class="lineno">   54</span>&#160;</div><div class="line"><a name="l00055"></a><span class="lineno">   55</span>&#160;  <a class="code" href="../../d3/d63/classcv_1_1Mat.html">Mat</a> frame;</div><div class="line"><a name="l00056"></a><span class="lineno">   56</span>&#160;</div><div class="line"><a name="l00057"></a><span class="lineno">   57</span>&#160;  <span class="comment">// get bounding box</span></div><div class="line"><a name="l00058"></a><span class="lineno">   58</span>&#160;  cap &gt;&gt; frame;</div><div class="line"><a name="l00060"></a><span class="lineno">   60</span>&#160;  vector&lt;Rect&gt; ROIs;</div><div class="line"><a name="l00061"></a><span class="lineno">   61</span>&#160;  <a class="code" href="../../d7/dfc/group__highgui.html#ga0f11fad74a6432b8055fb21621a0f893">selectROIs</a>(<span class="stringliteral">&quot;tracker&quot;</span>,frame,ROIs);</div><div class="line"><a name="l00063"></a><span class="lineno">   63</span>&#160;</div><div class="line"><a name="l00064"></a><span class="lineno">   64</span>&#160;  <span class="comment">//quit when the tracked object(s) is not provided</span></div><div class="line"><a name="l00065"></a><span class="lineno">   65</span>&#160;  <span class="keywordflow">if</span>(ROIs.size()&lt;1)</div><div class="line"><a name="l00066"></a><span class="lineno">   66</span>&#160;    <span class="keywordflow">return</span> 0;</div><div class="line"><a name="l00067"></a><span class="lineno">   67</span>&#160;</div><div class="line"><a name="l00068"></a><span class="lineno">   68</span>&#160;  <span class="comment">// initialize the tracker</span></div><div class="line"><a name="l00070"></a><span class="lineno">   70</span>&#160;<span class="comment"></span>  std::vector&lt;Ptr&lt;legacy::Tracker&gt; &gt; algorithms;</div><div class="line"><a name="l00071"></a><span class="lineno">   71</span>&#160;  <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i &lt; ROIs.size(); i++)</div><div class="line"><a name="l00072"></a><span class="lineno">   72</span>&#160;  {</div><div class="line"><a name="l00073"></a><span class="lineno">   73</span>&#160;      algorithms.push_back(createTrackerByName_legacy(trackingAlg));</div><div class="line"><a name="l00074"></a><span class="lineno">   74</span>&#160;      objects.push_back(ROIs[i]);</div><div class="line"><a name="l00075"></a><span class="lineno">   75</span>&#160;    }</div><div class="line"><a name="l00076"></a><span class="lineno">   76</span>&#160;</div><div class="line"><a name="l00077"></a><span class="lineno">   77</span>&#160;  trackers.<a class="code" href="../../df/d4a/classcv_1_1legacy_1_1MultiTracker.html#a63700e4f7291959acc1eee87e03a8e39">add</a>(algorithms,frame,objects);</div><div class="line"><a name="l00079"></a><span class="lineno">   79</span>&#160;</div><div class="line"><a name="l00080"></a><span class="lineno">   80</span>&#160;  <span class="comment">// do the tracking</span></div><div class="line"><a name="l00081"></a><span class="lineno">   81</span>&#160;  printf(<span class="stringliteral">&quot;Start the tracking process, press ESC to quit.\n&quot;</span>);</div><div class="line"><a name="l00082"></a><span class="lineno">   82</span>&#160;  <span class="keywordflow">for</span> ( ;; ){</div><div class="line"><a name="l00083"></a><span class="lineno">   83</span>&#160;    <span class="comment">// get frame from the video</span></div><div class="line"><a name="l00084"></a><span class="lineno">   84</span>&#160;    cap &gt;&gt; frame;</div><div class="line"><a name="l00085"></a><span class="lineno">   85</span>&#160;</div><div class="line"><a name="l00086"></a><span class="lineno">   86</span>&#160;    <span class="comment">// stop the program if no more images</span></div><div class="line"><a name="l00087"></a><span class="lineno">   87</span>&#160;    <span class="keywordflow">if</span>(frame.rows==0 || frame.cols==0)</div><div class="line"><a name="l00088"></a><span class="lineno">   88</span>&#160;      <span class="keywordflow">break</span>;</div><div class="line"><a name="l00089"></a><span class="lineno">   89</span>&#160;</div><div class="line"><a name="l00090"></a><span class="lineno">   90</span>&#160;    <span class="comment">//update the tracking result</span></div><div class="line"><a name="l00092"></a><span class="lineno">   92</span>&#160;<span class="comment"></span>    trackers.<a class="code" href="../../df/d4a/classcv_1_1legacy_1_1MultiTracker.html#a63a4d79374e33cdcafd5c18e207a27d6">update</a>(frame);</div><div class="line"><a name="l00094"></a><span class="lineno">   94</span>&#160;</div><div class="line"><a name="l00096"></a><span class="lineno">   96</span>&#160;    <span class="comment">// draw the tracked object</span></div><div class="line"><a name="l00097"></a><span class="lineno">   97</span>&#160;    <span class="keywordflow">for</span>(<span class="keywordtype">unsigned</span> i=0;i&lt;trackers.<a class="code" href="../../df/d4a/classcv_1_1legacy_1_1MultiTracker.html#a95a029a7494fae9600bc29e4fe6de645">getObjects</a>().size();i++)</div><div class="line"><a name="l00098"></a><span class="lineno">   98</span>&#160;      <a class="code" href="../../d6/d6e/group__imgproc__draw.html#ga07d2f74cadcf8e305e810ce8eed13bc9">rectangle</a>( frame, trackers.<a class="code" href="../../df/d4a/classcv_1_1legacy_1_1MultiTracker.html#a95a029a7494fae9600bc29e4fe6de645">getObjects</a>()[i], <a class="code" href="../../dc/d84/group__core__basic.html#ga599fe92e910c027be274233eccad7beb">Scalar</a>( 255, 0, 0 ), 2, 1 );</div><div class="line"><a name="l00100"></a><span class="lineno">  100</span>&#160;</div><div class="line"><a name="l00101"></a><span class="lineno">  101</span>&#160;    <span class="comment">// show image with the tracked object</span></div><div class="line"><a name="l00102"></a><span class="lineno">  102</span>&#160;    <a class="code" href="../../d7/dfc/group__highgui.html#ga453d42fe4cb60e5723281a89973ee563">imshow</a>(<span class="stringliteral">&quot;tracker&quot;</span>,frame);</div><div class="line"><a name="l00103"></a><span class="lineno">  103</span>&#160;</div><div class="line"><a name="l00104"></a><span class="lineno">  104</span>&#160;    <span class="comment">//quit on ESC button</span></div><div class="line"><a name="l00105"></a><span class="lineno">  105</span>&#160;    <span class="keywordflow">if</span>(<a class="code" href="../../d7/dfc/group__highgui.html#ga5628525ad33f52eab17feebcfba38bd7">waitKey</a>(1)==27)<span class="keywordflow">break</span>;</div><div class="line"><a name="l00106"></a><span class="lineno">  106</span>&#160;  }</div><div class="line"><a name="l00107"></a><span class="lineno">  107</span>&#160;</div><div class="line"><a name="l00108"></a><span class="lineno">  108</span>&#160;}</div><div class="ttc" id="group__core__basic_html_ga599fe92e910c027be274233eccad7beb"><div class="ttname"><a href="../../dc/d84/group__core__basic.html#ga599fe92e910c027be274233eccad7beb">cv::Scalar</a></div><div class="ttdeci">Scalar_&lt; double &gt; Scalar</div><div class="ttdef"><b>Definition:</b> types.hpp:669</div></div>
<div class="ttc" id="videoio_8hpp_html"><div class="ttname"><a href="../../dc/d3d/videoio_8hpp.html">videoio.hpp</a></div></div>
<div class="ttc" id="group__imgproc__draw_html_ga07d2f74cadcf8e305e810ce8eed13bc9"><div class="ttname"><a href="../../d6/d6e/group__imgproc__draw.html#ga07d2f74cadcf8e305e810ce8eed13bc9">cv::rectangle</a></div><div class="ttdeci">void rectangle(InputOutputArray img, Point pt1, Point pt2, const Scalar &amp;color, int thickness=1, int lineType=LINE_8, int shift=0)</div><div class="ttdoc">Draws a simple, thick, or filled up-right rectangle. </div></div>
<div class="ttc" id="highgui_8hpp_html"><div class="ttname"><a href="../../d4/dd5/highgui_8hpp.html">highgui.hpp</a></div></div>
<div class="ttc" id="group__highgui_html_ga453d42fe4cb60e5723281a89973ee563"><div class="ttname"><a href="../../d7/dfc/group__highgui.html#ga453d42fe4cb60e5723281a89973ee563">cv::imshow</a></div><div class="ttdeci">void imshow(const String &amp;winname, InputArray mat)</div><div class="ttdoc">Displays an image in the specified window. </div></div>
<div class="ttc" id="namespacecv_html"><div class="ttname"><a href="../../d2/d75/namespacecv.html">cv</a></div><div class="ttdoc">&quot;black box&quot; representation of the file storage associated with a file on disk. </div><div class="ttdef"><b>Definition:</b> affine.hpp:51</div></div>
<div class="ttc" id="classcv_1_1legacy_1_1MultiTracker_html_a63a4d79374e33cdcafd5c18e207a27d6"><div class="ttname"><a href="../../df/d4a/classcv_1_1legacy_1_1MultiTracker.html#a63a4d79374e33cdcafd5c18e207a27d6">cv::legacy::MultiTracker::update</a></div><div class="ttdeci">bool update(InputArray image)</div><div class="ttdoc">Update the current tracking status. The result will be saved in the internal storage. </div></div>
<div class="ttc" id="classcv_1_1VideoCapture_html"><div class="ttname"><a href="../../d8/dfe/classcv_1_1VideoCapture.html">cv::VideoCapture</a></div><div class="ttdoc">Class for video capturing from video files, image sequences or cameras. </div><div class="ttdef"><b>Definition:</b> videoio.hpp:664</div></div>
<div class="ttc" id="classcv_1_1legacy_1_1MultiTracker_html"><div class="ttname"><a href="../../df/d4a/classcv_1_1legacy_1_1MultiTracker.html">cv::legacy::MultiTracker</a></div><div class="ttdoc">This class is used to track multiple objects using the specified tracker algorithm. </div><div class="ttdef"><b>Definition:</b> tracking_legacy.hpp:351</div></div>
<div class="ttc" id="contrib_2modules_2tracking_2include_2opencv2_2tracking_8hpp_html"><div class="ttname"><a href="../../de/df6/contrib_2modules_2tracking_2include_2opencv2_2tracking_8hpp.html">tracking.hpp</a></div></div>
<div class="ttc" id="utility_8hpp_html"><div class="ttname"><a href="../../d1/d4e/utility_8hpp.html">utility.hpp</a></div></div>
<div class="ttc" id="classcv_1_1legacy_1_1MultiTracker_html_a63700e4f7291959acc1eee87e03a8e39"><div class="ttname"><a href="../../df/d4a/classcv_1_1legacy_1_1MultiTracker.html#a63700e4f7291959acc1eee87e03a8e39">cv::legacy::MultiTracker::add</a></div><div class="ttdeci">bool add(Ptr&lt; cv::legacy::Tracker &gt; newTracker, InputArray image, const Rect2d &amp;boundingBox)</div><div class="ttdoc">Add a new object to be tracked. </div></div>
<div class="ttc" id="group__highgui_html_ga0f11fad74a6432b8055fb21621a0f893"><div class="ttname"><a href="../../d7/dfc/group__highgui.html#ga0f11fad74a6432b8055fb21621a0f893">cv::selectROIs</a></div><div class="ttdeci">void selectROIs(const String &amp;windowName, InputArray img, std::vector&lt; Rect &gt; &amp;boundingBoxes, bool showCrosshair=true, bool fromCenter=false)</div><div class="ttdoc">Allows users to select multiple ROIs on the given image. </div></div>
<div class="ttc" id="classcv_1_1Mat_html"><div class="ttname"><a href="../../d3/d63/classcv_1_1Mat.html">cv::Mat</a></div><div class="ttdoc">n-dimensional dense array class </div><div class="ttdef"><b>Definition:</b> mat.hpp:801</div></div>
<div class="ttc" id="group__highgui_html_ga5628525ad33f52eab17feebcfba38bd7"><div class="ttname"><a href="../../d7/dfc/group__highgui.html#ga5628525ad33f52eab17feebcfba38bd7">cv::waitKey</a></div><div class="ttdeci">int waitKey(int delay=0)</div><div class="ttdoc">Waits for a pressed key. </div></div>
<div class="ttc" id="classcv_1_1legacy_1_1MultiTracker_html_a95a029a7494fae9600bc29e4fe6de645"><div class="ttname"><a href="../../df/d4a/classcv_1_1legacy_1_1MultiTracker.html#a95a029a7494fae9600bc29e4fe6de645">cv::legacy::MultiTracker::getObjects</a></div><div class="ttdeci">const std::vector&lt; Rect2d &gt; &amp; getObjects() const</div><div class="ttdoc">Returns a reference to a storage for the tracked objects, each object corresponds to one tracker algo...</div></div>
</div><!-- fragment --><h2>Explanation </h2>
<ol type="1">
<li><p class="startli"><b>Create the MultiTracker object</b></p>
<div class="fragment"><div class="line">  legacy::MultiTracker trackers;</div></div><!-- fragment --><p> You can create the MultiTracker object and use the same tracking algorithm for all tracked object as shown in the snippet. If you want to use different type of tracking algorithm for each tracked object, you should define the tracking algorithm whenever a new object is added to the MultiTracker object.</p>
</li>
<li><p class="startli"><b>Selection of multiple objects</b></p>
<div class="fragment"><div class="line">  vector&lt;Rect&gt; ROIs;</div><div class="line">  <a class="code" href="../../d7/dfc/group__highgui.html#ga0f11fad74a6432b8055fb21621a0f893">selectROIs</a>(<span class="stringliteral">&quot;tracker&quot;</span>,frame,ROIs);</div></div><!-- fragment --><p> You can use selectROI to select multiple objects with the result stored in a vector of <a class="el" href="../../dc/d84/group__core__basic.html#ga894fe0940d40d4d65f008a2ca4e616bd">cv::Rect2d</a> as shown in the code.</p>
</li>
<li><p class="startli"><b>Adding the tracked object to MultiTracker</b></p>
<div class="fragment"><div class="line">  std::vector&lt;Ptr&lt;legacy::Tracker&gt; &gt; algorithms;</div><div class="line">  <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i &lt; ROIs.size(); i++)</div><div class="line">  {</div><div class="line">      algorithms.push_back(createTrackerByName_legacy(trackingAlg));</div><div class="line">      objects.push_back(ROIs[i]);</div><div class="line">    }</div><div class="line"></div><div class="line">  trackers.add(algorithms,frame,objects);</div></div><!-- fragment --><p> You can add all tracked objects at once to the MultiTracker as shown in the code. In this case, all objects will be tracked using same tracking algorithm as specified in decaration of MultiTracker object. If you want to use different tracker algorithms for each tracked object, You should add the tracked objects one by one and specify their tracking algorithm using the variant of <a class="el" href="../../df/d4a/classcv_1_1legacy_1_1MultiTracker.html#a63700e4f7291959acc1eee87e03a8e39">cv::legacy::MultiTracker::add</a>. </p><dl class="section see"><dt>See also</dt><dd>cv::legacy::MultiTracker::add( const String&amp; trackerType, const Mat&amp; image, const Rect2d&amp; boundingBox )</dd></dl>
</li>
<li><p class="startli"><b>Obtaining the result</b></p>
<div class="fragment"><div class="line">    <span class="comment">// draw the tracked object</span></div><div class="line">    <span class="keywordflow">for</span>(<span class="keywordtype">unsigned</span> i=0;i&lt;trackers.getObjects().size();i++)</div><div class="line">      <a class="code" href="../../d6/d6e/group__imgproc__draw.html#ga07d2f74cadcf8e305e810ce8eed13bc9">rectangle</a>( frame, trackers.getObjects()[i], <a class="code" href="../../dc/d84/group__core__basic.html#ga599fe92e910c027be274233eccad7beb">Scalar</a>( 255, 0, 0 ), 2, 1 );</div></div><!-- fragment --><p> You can access the result from the public variable <a class="el" href="../../df/d4a/classcv_1_1legacy_1_1MultiTracker.html#aeeea6af86b1fc912ad8ce64d6a576875">cv::legacy::MultiTracker::objects</a> provided by the MultiTracker class as shown in the code. </p>
</li>
</ol>
</div></div><!-- contents -->
<!-- HTML footer for doxygen 1.8.6-->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Fri Apr 2 2021 11:36:39 for OpenCV by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="../../doxygen.png" alt="doxygen"/>
</a> 1.8.13
</small></address>
<script type="text/javascript">
//<![CDATA[
addTutorialsButtons();
//]]>
</script>
</body>
</html>
